2023/12/231334字符
可迭代协议
const arr = [1, 2, 3, 4, 5];
const iterator = arr[Symbol.iterator]();
iterator.next(); //--> {value: 1, done: false}
iterator.next(); //--> {value: 2, done: false}
iterator.next(); //--> {value: 3, done: false}
const arr = [1, 2, 3, 4, 5];
const iterator = arr[Symbol.iterator]();
let result = iterator.next();
while (!result.done) {
let item = result.value;
console.log(item); //--> 1 2 3 4 5
// 下一次迭代
result = iterator.next();
}
// 语法糖 循环可迭代对象
for (const item of arr) { // for of 返回的是value值,for in 返回的是key值
console.log(item); //--> 1 2 3 4 5
}
可迭代对象都能进行 for of 循环
对象转数组
const obj = {
name: 'baozai',
age: 18,
sex: 'boy',
// 对象转数组
[Symbol.iterator] () {
const values = Object.values(this);
let i = 0;
return {
next: () => {
const result = {
value: values,
done: i >= values.length
}
i++;
return result;
}
}
}
}
let value = obj[Symbol.iterator]().next().value;
console.log(value) //--> ["baozai", 18, "boy"]